home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
oh!.2hd
/
OH!DEN_B.LZH
/
TOOLS
/
CDC
/
CDCSRC.LZH
/
TNB.H
< prev
next >
Wrap
Text File
|
1995-03-20
|
26KB
|
867 lines
/*
* tnb.h for X68k XC Compiler v2.00 Copyright 1993 1994 TNB製作所
* + TNB.L
* + ZMCLIB.L
*/
#include <IOCSLIB.H>
#include <DOSLIB.H>
/*
z:\HELP\IOCS_DOC.HLP 1
z:\HELP\DOS_DOC.HLP 1
*/
/* 定番 */
#define UNchar unsigned char
#define UNshort unsigned short
#define UNint unsigned int
#define UNlong unsigned long
#define elif else if
#define VMODE 0x80000000
/* インライン関数もどき */
#define VADDS(p,x,y) ( 0xC00000+(p)*0x80000+(x)*2+(y)*1024 )
#define VADDS_(x,y) ( (x)*2+(y)*1024 )
#define ADDS_(x,y) ( (x)*2+(y)*1024 )
#define BADDS(p,x,y) ( 0xEBC000+(p)*0x2000+(x)*2+(y)*0x80 )
#define BADDS_(x,y) ( (x)*2+(y)*0x80 )
#define RR(R) ( ((R)>> 6) & 0x1F )
#define GG(G) ( ((G)>>11) & 0x1F )
#define BB(B) ( ((B)>> 1) & 0x1F )
#define II(I) ( (I) & 1 )
#define RGB(R,G,B) ( ((R)<<6) | ((G)<<11) | ((B)<<1) )
#define pow2(i) (1<<(i))
#define bit(i) (1<<(i))
#define nbit(i) ( 0xFFFFFFFF-(1<<(i)) )
#define down_for(I,J) for( I=(J)-1;I>=0;I-- )
#define B_USER(I) B_SUPER(I)
#define B_USER_(I) {if ( (I)>=2 ) B_SUPER(I);}
#ifdef FORWORD
#define __PROTO_TYPE
#endif
#ifdef __STDC__
#define __PROTO_TYPE
#endif
#ifdef __PROTO_TYPE
/*------------------------------------------------------*/
/* STICK関係PROTO */
/*------------------------------------------------------*/
/*--データ引--*/
/*::ノーマル::*/
long JOYSTICK1(void); /*[0BA0RLDU] */
long JOYSTICK2(void);
/*::マウス::*/
long MSXMOUSE(long po);
/* MSXマウス専用
挿されていない場合は 0x0011が返るがこれでの識別は不可能
po=0;JOY STICK PORT 1
!=0;JOY STICK PORT 2
- - - - - - [R][L]:[ X 8bit ]:[ Y 8bit ]
*/
long SEGAMOUSE(void);
/* JOY PROT1 マウス
戻り値が-1の場合 タップ端末マウス情報をSEGAMOUSES[x] に格納
戻り値が-2の場合 セガマウス接続、情報をSEGAMOUSES[0]に格納
0の場合 セガマウス(タップ)が接続されていない。
(スティック情報は格納されない)
*/
struct SEGAMOUSEPTR {
unsigned char type;
unsigned char bot; /*- - [R][L]*/
char xm,ym; /*X,Y移動値*/
};
extern struct SEGAMOUSEPTR SEGAMOUSES[4];
/* SEGAMOUSES は SEGATAPS と同じアドレス!! */
/*::スティック::*/
long MDJOYSTICK(long po);
/* メガドラパッド用 68用のものチェック可能
JOYSTICK?() 同等品
po=0;JOY STICK PORT 1
!=0;JOY STICK PORT 2
*/
long EXJOYSTICK(long po);
/* ノーマル、リブラブ、CPMD
JOYSTICK?() 同等品
po=0;JOY STICK PORT 1
!=0;JOY STICK PORT 2
*/
long CYBERSTICK(void);
/* 戻り値がマイナスの場合 CYBERS に JOY PORT 1 の サイバー
スティックの情報を読み込みます。
0の場合(Analog)接続されていない。
*/
struct CYBERPTR {
unsigned short bot; /* 0 0 0 0 [A][B][A][B][A][B][C][D][E1][E2][Sta][SeL]*/
unsigned char ud1;
unsigned char rl1;
unsigned char ud2;
unsigned char rl2;
};
extern struct CYBERPTR CYBERS;
/*::マルチタップ::*/
long SEGATAP(long mo);
long SEGATAP_(long mo);
/* セがタップ専用
戻り値が-1の場合SEGATAPS[x]に情報を格納します
戻り値が-2の場合 セガマウス接続、情報をSEGAMOUSES[0]に格納
以外の値はMDJOYSTICK(0)と同。
mo=0;マウスデータは無視する。type==2の時でもデータは無効
!=0;マウスデータの収納。type==2のデータは有効(JOYMOUSEPTR[])
SEGATAP_()はタップとの通信中、他の割り込みを禁止しない
*/
struct SEGATAPPTR {
unsigned char type; /*pad;0|1 mouse;2 */
unsigned char bot; /*pad;未使用 mouse;- - [R][L]*/
unsigned short data; /*pad;型による mouse;[X 8bit][Y 8bit]*/
};
extern struct SEGATAPPTR SEGATAPS[4];
/* JOYSTICK?() MDJOYSTICK() SEGATAPS[?].dataの値
各bit 押されていれば 1になる
このビットに注目
↓ ↓ ↓ ↓
◎68パット
0 0 0 0 0 0 0 0 : 0 [B] [A] 0 [R][L][D][U]
( 0 [B] [A] 0 [R][L][D][U] : 0 [B] [A] 0 [R][L][D][U] )
◎6ボタンパット
[st][C][B][A][md][X][Y][Z] : 1 [B][c] 0 [R][L][D][U]
◎3ボタンパット
[st][C][B][A] 0 0 0 0 : 1 [B][c] 1 [R][L][D][U]
◎マジカルパット
1 [B] [D] 0 [RT][LT] 1 1 : 0 [A] [C] 0 [R][L][D][U]
◎(EX)リブラブパット
0 0 0 0 [R][L][D][U] : 0 [B] [A] 0 [R][L][D][U]
◎(EX)CPSF-MD パット
0 [st][C] 0[md][X][Y][Z] : 0 [B] [A] 0 [R][L][D][U]
◎(EX)CPSF-PC スティック
0 [st][L] 0[sl][X][Y][R] : 0 [B] [A] 0 [R][L][D][U]
◎(EX)CyberStick-DigtalMode
0 [E2][E1]0[D][C][S][S]: 0 [B] [A] 0 [R][L][D][U]
◎SEGA-TAPパット
[st][C][B][A][md][X][Y][Z] : 1 [B][c] 0 [R][L][D][U]
[st][C][B][A] 0 0 0 0 : 1 [B][c] 1 [R][L][D][U]
SEGATAPPTR.type= 0 ; 3ボタン
1 ; 6ボタン
2 ; マウス
15 ; 非接続
*/
/*--データチェック--*/
/*ノーマル専用(含入力)*/
long STICK1(void);
long STRIG1_A(void);
long STRIG1_B(void);
long STRIG1_RUN(void);
long STRIG1_SELECT(void);
long STICK2(void);
long STRIG2_A(void);
long STRIG2_B(void);
long STRIG2_RUN(void);
long STRIG2_SELECT(void);
/*多種対応*/
long STICKD(long d);
/* 向きを数値で返す
d=データ
*/
#define STRIGD_A(d) ((d)&0x0020)
#define STRIGD_B(d) ((d)&0x0040)
#define STRIGD_AA(d) ((d)&0x1000)
#define STRIGD_BB(d) ((d)&0x2000)
#define STRIGD_CC(d) ((d)&0x4000)
#define STRIGD_XX(d) ((d)&0x0400)
#define STRIGD_YY(d) ((d)&0x0200)
#define STRIGD_ZZ(d) ((d)&0x0100)
#define STRIGD_RUN_(d) ((d)&0x8000)
#define STRIGD_SELECT_(d) ((d)&0x0800)
long STRIGD_RUN(long d); /*Towns [Run] 対応*/
long STRIGD_SELECT(long d); /*Towns [Sel] 対応*/
/*マルチタップ専用*/
#define JOYSTICKM(n) ( (SEGATAPS[n].type<=1)? SEGATAPS[n].data :0 )
#define STRIGM_A(n) ( (SEGATAPS[n].type<=1)?STRIGD_A( SEGATAPS[n].data):0 )
#define STRIGM_B(n) ( (SEGATAPS[n].type<=1)?STRIGD_B( SEGATAPS[n].data):0 )
#define STRIGM_AA(n) ( (SEGATAPS[n].type<=1)?STRIGD_AA(SEGATAPS[n].data):0 )
#define STRIGM_BB(n) ( (SEGATAPS[n].type<=1)?STRIGD_BB(SEGATAPS[n].data):0 )
#define STRIGM_CC(n) ( (SEGATAPS[n].type<=1)?STRIGD_CC(SEGATAPS[n].data):0 )
#define STRIGM_XX(n) ( (SEGATAPS[n].type<=1)?STRIGD_XX(SEGATAPS[n].data):0 )
#define STRIGM_YY(n) ( (SEGATAPS[n].type<=1)?STRIGD_YY(SEGATAPS[n].data):0 )
#define STRIGM_ZZ(n) ( (SEGATAPS[n].type<=1)?STRIGD_ZZ(SEGATAPS[n].data):0 )
#define STRIGM_RUN(n) ( (SEGATAPS[n].type<=1)?(SEGATAPS[n].data & 0x8000):0 )
#define STRIGM_SELECT(n) ( (SEGATAPS[n].type<=1)?(SEGATAPS[n].data & 0x0800):0 )
/*------------------------------------------------------*/
/* */
/* SPRITE関係PROTO */
/* */
/*------------------------------------------------------*/
#define SP_ON2_S() (*(unsigned short*)0xEB0808|=0x0200)
#define SP_OFF2_S() (*(unsigned short*)0xEB0808&=0xFDFF)
#define SP_ON_S() (*(unsigned short*)0xE82600|=0x0040)
#define SP_OFF_S() (*(unsigned short*)0xE82600&=0xFFBF)
long SP_COLOR(long pc,long c,long pb);
long SP_COLOR_S(long pc,long c,long pb);
/* スプライトカラーチェンジ
pc=カラーコード(0-15)
c=カラーナンバー(0-65535) c=-1の場合変更せず現在値を戻す
pd=カラーブロック(0-15)
or
pc=カラーコード(0-255)
c=カラーナンバー(0-65535) c=-1の場合変更せず現在値を戻す
pd=0 (固定)
*/
void SP_DEFCH(long cd,void *,long no);
void SP_DEFCH_S(long cd,void *,long no);/*SUPER*/
/*
*/
void SP_MOVE(long n,long x,long y);
void SP_MOVE_S(long n,long x,long y);
/* スプライトプレーン移動のみ
n=プレーンナンバー x,y=座標
*/
void BGSET(long BA,long p);
#define BGSET_S(BA,p) ( *(unsigned short*)(BA)=(p) )
/* BGへの書き込み
BA=BADDS(p,x,y)での指定
p= bit 15 垂直反転
bit 14 水平反転
bit 8,9,10,11 パレット
bit 0-7 0-255 キャラナンバー
*/
void BGTESTST0(long x,long y,long p);
void BGTESTST0_S(long x,long y,long p);
void BGTESTST1(long x,long y,long p);
void BGTESTST1_S(long x,long y,long p);
/* BGへの書き込み
x,y=座標 BG1へはy+=32で可能
p= bit 15 垂直反転
bit 14 水平反転
bit 8,9,10,11 パレット
bit 0-7 0-255 キャラナンバー
*/
/*------------------------------------------------------*/
/* GRAPHIC関係PROTO */
/*------------------------------------------------------*/
#define GG_ON_S() (*(unsigned short*)0xE82600|=0x000F)
#define GG_OFF_S() (*(unsigned short*)0xE82600&=0xFFF0)
void GGPRIORITY(long GP0,long GP1,long GP2,long GP3);
/* Graphicの4つのプレーンの優先順位を変える
GP0ーGP3=0から3で、0が一番上
defaultでは(0,1,2,3)。同じ数字は禁止。
256色モードではGP0+GP1がペアでページ0
GP2+GP3がペアでページ1をきめる
*/
void GGFILL(long VA,long lx,long ly,long c);
void GGFILL_S(long VA,long lx,long ly,long c);/*SUPER*/
void GGFILL8(long VA,long lx8,long ly,long c);
void GGFILL8_S(long VA,long lx8,long ly,long c);/*SUPER*/
/* GraphicにBOX FILLを書く(全画面対応)
VA=VADDS(p,x,y)で左上座標
lx,ly=BOXの辺の長さ
lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
c=カラー
*/
void GGPSET(long VA,long c);
#define GGPSET_S(VA,c) ( *(unsigned short*)(VA)=(c) )
/* Graphicに点を打つ(全画面対応)
VA=VADDS(p,x,y)で座標
c=カラー
*/
long GGPALET(long n,long c);
long GGPALET_S(long n,long c);
/* パレットチェンジ
n=パレットコード(画面モードによる)
c=カラーコード(0-65535)
*/
void GGMOSAIC(long VA,long lx,long ly,long m);
/* Graphicの指定範囲内のモザイク処理をする(全画面対応)
VA=VADDS(p,x,y)で左上座標
lx,ly=BOXの辺の長さ
m=モザイクモード
*/
long GGPOINT(long VA);
#define GGPOINT_S(VA) ( *(unsigned short*)(VA) )
/* Graphicの色を返す(全画面対応)
VA=VADDS(p,x,y)で座標
*/
void GGGET(long VA,long lx,long ly,void *bu);
void GGGET_S(long VA,long lx,long ly,void *bu);
void GGPUT(long VA,long lx,long ly,void *bu);
void GGPUT_S(long VA,long lx,long ly,void *bu);
/* Graphicの指定範囲のゲットプット。ただし、256色モード以下用
VA=VADDS(p,x,y)で左上座標
lx=横方向のBOXの辺の長さ
ly=たて方向BOXの辺の長さ
bu=パッファホインタ。バッファーは要(lx×ly)byte
(DMAC使用)
*/
void GGGET8(long VA,long lx8,long ly,void *bu);/*xは8Dot単位*/
void GGPUT8(long VA,long lx8,long ly,void *bu);/*xは8Dot単位*/
/* Graphicの指定範囲のゲットプット。ただし、256色モード以下用
VA=VADDS(p,x,y)で左上座標
lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
ly=たて方向BOXの辺の長さ
bu=パッファホインタ。バッファーは要(lx8×8×ly)byte
(非DMAC使用:ClockUp機に有効!?)
*/
void GGCOPY(long VA1,long lx,long ly,long VA2);
void GGCOPY_S(long VA1,long lx,long ly,long VA2);
/* Graphicの指定範囲のコピー
VA1=VADDS(p,x,y)で左上座標 sous
VA2=VADDS(p,x,y)で左上座標 dest
lx=横方向のBOXの辺の長さ
ly=たて方向BOXの辺の長さ
*/
#define GGCOPY8(VA1,lx8,ly,VA2) GGCOPY(VA1,(lx8)*8,ly,VA2)
#define GGCOPY8_S(VA1,lx8,ly,VA2) GGCOPY_S(VA1,(lx8)*8,ly,VA2)
/* Graphicの指定範囲のコピー
VA1=VADDS(p,x,y)で左上座標 sous
VA2=VADDS(p,x,y)で左上座標 dest
lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
ly=たて方向BOXの辺の長さ
*/
void GGSCRCLS(long m);
/* Graphicの消去
m=CLS Mode Nunber
0,1 ; Page 0,1の高速クリヤー
2,3 ; Page 0,1の変則クリヤー
4以上 禁止、動作は保証されない
*/
void GGSCRCLS2(long VA,long lx8,long ly);
/* Graphicの消去
VA=VADDS(p,x,y)で左上座標
lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
ly=たて方向BOXの辺の長さ
*/
void GGCHCOLOR8(long VA,long lx8,long ly,long c1,long c2);
/* Graphicの指定範囲のカラーチェンジ
VA1=VADDS(p,x,y)で左上座標 sous
lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
c1,c2=c1のカラーナンバーをc2のカラーナンバーへ
*/
/*------------------------------------------------------*/
/* (GRAPHIC+SPRITE)/2 関係PROTO */
/*------------------------------------------------------*/
extern volatile void *GGPCG8_BUFF;
/* GGPCG8()用データの先頭アドレス
defaultでは0xEB8000(SPRITE DATA ADDS)になっている
*/
void GGPCG8(long VA,long c);
void GGPCG8_S(long VA,long c);
/* GraphicにBGのように表示
VA = VADDS(p,x,y)で座標指定
c= bit 15 垂直反転
bit 14 水平反転
bit 8,9,10,11 パレット
bit 0-7 0-255 キャラナンバー
*/
extern volatile void *GGPCG16_BUFF;
/* GGPCG16()用データの先頭アドレス
defaultでは0xEB8000(SPRITE DATA ADDS)になっている
*/
void GGPCG16(long VA,long c);
void GGPCG16_S(long VA,long c);
/* GraphicにBGのように表示
VA = VADDS(p,x,y)で座標指定
c= bit 15 垂直反転
bit 14 水平反転
bit 8,9,10,11 パレット
bit 0-7 0-255 キャラナンバー
*/
/*------------------------------------------------------*/
/* TEXT関係PROTO */
/*------------------------------------------------------*/
#define TX_ON_S() (*(unsigned short*)0xE82600|=0x0020)
#define TX_OFF_S() (*(unsigned short*)0xE82600&=0xFFDF)
/*------------------------------------------------------*/
/* FONT関係PROTO */
/*------------------------------------------------------*/
/*struct FNTBUF {
short xl,yl;
unsigned char buffer[72];
};*/
void FNTGET8(long KC,struct FNTBUF *AD);
/* 8ドット漢字パターンを指定アドレスに書き込む
KC=漢字コード
AD=データの書き込まれるアドレス
半角のみ 0.w,2.w = Xsize,Ysize(4,8) 全12byte
全角のみ 0.w,2.w = Xsize,Ysize(8,8) 全12byte
*/
extern volatile void *FNT12_BUFF;
/*FNTGET12用 12dotFontData:要町等のの先頭アドレス
0の場合,FNTGET12Tが呼び出される
サイズ 215136byte
*/
void FNTGET12(long KC,struct FNTBUF *AD);
/* 12ドット漢字パターンを指定アドレスに書き込む
KC=漢字コード
AD=データの書き込まれるアドレス
半角のみ 0.w,2.w = Xsize,Ysize(6,12) 全16byte
全角のみ 0.w,2.w = Xsize,Ysize(12,12) 全28byte
FNT12_BUFFが参照される
*/
void FNTGET12T(long KC,struct FNTBUF *AD);
/* 12ドット漢字パターンを指定アドレスに書き込む
24dotfontをコンバート、全角のみ。半角コードは保証されない
KC=漢字コード
AD=データの書き込まれるアドレス
全角のみ 0.w,2.w = Xsize,Ysize 全28byte
*/
#define FNTGET16(A,B) FNTGET(8,A,B)
#define FNTGET24(A,B) FNTGET(12,A,B)
extern volatile long GGCHAR_COLOR1;
extern volatile long GGCHAR_COLOR2;
/*GGCHAR用カラーコード指定
c1=文字カラー1(範囲は画面モードによる)
c2=文字カラー2
*/
void GGCHAR(long VA,struct FNTBUF *AD);
void GGCHAR_S(long VA,struct FNTBUF *AD);/*SUPER*/
/* GRAPHICにCHAR.表示(全画面,24Dotまで対応)
VA=VADDS(p,x,y)での座標指定
AD=FNTGET12等でパターンをセットしたアドレス
*/
extern volatile void *FNT8_BUFF;
/*GGCHAR8/B用 8dotCharData
指定無い場合、GCROMの物を使用
(1*8)*文字数 byte
moji_s2d.xの出力するデータを使用
*/
void GGCHAR8(long VA,long CC);
void GGCHAR8_S(long VA,long CC);
/* GRAPHICに8DotCHAR.表示(全画面対応)
VA=VADDS(p,x,y)での座標指定
CC=キャラクターコード
*/
void GGCHAR8B(long VA,long CC);
void GGCHAR8B_S(long VA,long CC);
/* GGCHAR8()同等品
GGCHAR_COLOR1:が文字、GGCHAR_COLOR2が背景の色でべた書きする
VA=VADDS(p,x,y)での座標指定
CC=キャラクターコード
*/
/*------------------------------------------------------*/
/* TIMING関係PROTO */
/*------------------------------------------------------*/
void CRTVDISP(void);
#define CRTVDISP_S() \
asm("@@: btst.b #4,$00e88001 \n\
beq @b \n\
@@: btst.b #4,$00e88001 \n\
bne @b ");
/* CRTV同期タイミングを計る */
/*TIMER-D*/
void timD_start(void);
void timD_end(void);
void timD_set(long);
void timD_weit(void);
long timD_count(void);
long timD_countD(void);
/* 1m秒
*/
/*ONTIME*/
void ONtim_set(long);
void ONtim_weit(void);
long ONtim_count(void);
/* 1/100秒
*/
#define ONtim_countD() ONTIME()
long ONtim_margin( long ot,long ma );
/* ma/100sを過ぎていたら1を返す
ot=前回conutDで拾った値
ma= 1/100s
ex) i=ONtime_countD();
if ( ONtim_margin( i,500 ) ){
i=ONtim_countD();
いろいろ;
}
*/
/*要PROCESS=*/
void tim_set(long);
void tim_weit(void);
long tim_count(void);
long tim_countD(void);
#define tim_countD() TIME_PR()
/* 1m秒
*/
/*------------------------------------------------------*/
/* CALC関係 PROTO */
/*------------------------------------------------------*/
long isqrt( long r );
/* 整数平方根
戻り値=(long)( √r )
*/
#ifdef __GNUC__
#define MULU(o1,o2) ( (unsigned short)(o1)*(unsigned short)(o2) )
#define MULS(o1,o2) ( (short)(o1)*(short)(o2) )
static inline int DIVU(long o1,long o2);
static inline int DIVS(long o1,long o2);
static inline int MODU(long o1,long o2);
static inline int MODS(long o1,long o2);
#else
int MULU(long o1,long o2);
int MULS(long o1,long o2);
int DIVU(long o1,long o2);
int DIVS(long o1,long o2);
int MODU(long o1,long o2);
int MODS(long o1,long o2);
#endif
/*------------------------------------------------------*/
/* ETC PROTO */
/*------------------------------------------------------*/
long CHILD(void *st);
/*long child(void *st);*/
void PRIORITY(long SP,long TX,long GG);
void scr_prior(long,long,long);/*旧書式*/
/* スプライト、テキスト、グラフィックの優先順位を変える
SP=スプライト画面
TX=テキスト画面
GG=グラフィック画面
0から2で、0が一番上
defaultでは(0,1,2)。同じ数字は禁止(Err CHKはしてません)。
*/
void PRTK_OFF(void);
void PRTK_RECOVER(void);
/* COPY KEY キャンセル
COPY KEY 復活
*/
void INTPT_OFF(void);
/* INTERRUPTswでの割り込みを禁止*/
long INTPT_CHK(void);
/* INTPT_OFF()実行後、ボタンが押されていたら1を返す
この関数がコールされたら、フラグはクリアされる
*/
void INTPT_RECOVER(void);
/* もとに戻す */
void qsort_w(void *, long, long (*)(const void *, const void *));
/* qsort()の配列要素サイズが2に固定されているもの*/
#else
long SP_COLOR();
void SP_DEFCH();
void SP_DEFCH_S();/*SUPER*/
void SP_REGST_MV();
void GGFILL();
void GGFILL_S();/*SUPER*/
void GGPSET();
void GGPSET_S();
long GGPALET();
void GGMOSAIC();
void GGGET8();/*xは8Dot単位*/
void GGPUT8();/*xは8Dot単位*/
void GGCOPY();
void GGCOPY_S();/*SUPER*/
void GGSCRCLS();
void GGSCRCLS2();
void GGCHCOLOR8();
void CRTVDISP();
void CRTVDISP_S();
long STICK1(void);
long STRIG1_A(void);
long STRIG1_B(void);
long STRIG1_RUN(void);
long STRIG1_SELECT(void);
long JOYSTICK1(void); /*[-BA-RLDU] *
long STICK2(void);
long STRIG2_A(void);
long STRIG2_B(void);
long STRIG2_RUN(void);
long STRIG2_SELECT(void);
long JOYSTICK2(void);
/*要PROCESS=*/
void tim_set();
void tim_weit();
long tim_count();
/*TIMER-D*/
void timD_start();
void timD_end();
void timD_set();
void timD_weit();
long timD_count();
void DRAWMODE();
void FNTGET12();
void PRTK_OFF();
void PRTK_RECOVER();
void INTPT_OFF();
long INTPT_CHK();
void INTPT_RECOVER();
#endif
/*-----------------ZMCLIB---------------*/
struct ZMreturn {
long D0;
long A0;
};
struct ZMplaytmp {
unsigned long d2;
unsigned long d3;
unsigned long d4;
};
#ifdef __PROTO_TYPE
long Zm_drvchk( void ); /*-1:常駐 0:なし*/
void Zm_init( void );
long Zm_alloc( long,long );
long Zm_assign( long,long );
long Zm_vget( long,void * );
long Zm_vset( long,void * );
long Zm_tempo( long );
void Zm_tempo2( struct ZMreturn * );
long Zm_trk( long,long );
void Zm_trk_a( struct ZMreturn * );
long Zm_free( long );
long Zm_play( struct ZMplaytmp * );
unsigned long m_stat( unsigned long );
long Zm_stop( struct ZMplaytmp * );
long Zm_cont( struct ZMplaytmp * );
long Zm_atoi( long );
void Zinit_all( void );
void Zinit_stop( void );
long Zadpcm_read( long,short,short,unsigned short,short );
long Zplay_cnv_data( long,void * );
void Zse_play( long,void * );
void Zse_adpcm1( void *,long,short,short );
void Zse_adpcm2( long,short,short );
void Zset_ch_mode( long );
void Zcalc_total( long );
void Zfade_out( long );
long Zm_vset2( long,void * );
long Zblock_adpcm_data( void * );
void Zget_trk_tbl( struct ZMreturn * );
long Zget_timer_mode( void );
void Zset_fm_master_vol( long );
void Zset_timer_value( long );
void Zjump_active( long );
void Zset_mclk( long );
/*Zset_loop_time.s 1:*/
/*Zget_play_work.s 1:*/
/*Zrelease_support.s 1:*/
#undef __PROTO_TYPE
#else
void Zm_init();
long Zm_alloc();
long Zm_assign();
long Zm_vget();
long Zm_vset();
long Zm_tempo();
void Zm_tempo2();
long Zm_trk();
void Zm_trk_a()
long Zm_free();
long Zm_play();
unsigned long m_stat();
long Zm_stop();
long Zm_cont();
long Zm_atoi();
void Zinit_all();
void Zinit_stop();
long Zadpcm_read();
long Zplay_cnv_data();
void Zse_play();
void Zse_adpcm1();
void Zse_adpcm2();
void Zset_ch_mode();
void Zcalc_total();
void Zfade_out();
long Zm_vset2();
long Zblock_adpcm_data();
void Zget_trk_tbl();
long Zget_timer_mode();
void Zset_fm_master_vol();
void Zset_timer_value();
void Zjump_active();
void Zset_mclk();
#endif
/*-----------------ZMCLIB---------------*/
#ifdef __GNUC__
/* インラインマクロ定義 */
/*IOCS*/
#define BITSNS(gr) \
({register long _d0 asm("d0"); \
register long _d1 asm("d1"); \
_d0=0x04; \
_d1=(gr); \
asm("trap #15" \
:"=d"(_d0) \
:"0"(_d0),"d"(_d1) \
:"d0","d1"); \
_d0; \
})
#define MS_CURGT() \
({register long _d0 asm("d0"); \
_d0=0x75; \
asm("trap #15":"=d"(_d0):"0"(_d0):"d0"); \
_d0; \
})
#define MS_GETDT() \
({register long _d0 asm("d0"); \
_d0=0x74; \
asm("trap #15":"=d"(_d0):"0"(_d0):"d0"); \
_d0; \
})
/*アクセスランプを反転する*/
#define TIMER_LED() \
asm(" bset #0,$00e8a01b \
eori.b #%0000_0111,$00e8a001 \
");
/* 文字列操作マクロ */
#define strcpy_(DES,SRC) \
do { char *_d = (char *)(DES); \
char *_s = (char *)(SRC); \
while (*_d ++ = *_s ++); \
} while (0)
#define strcat_(SR0,SR1) \
do { char *_d = (char *)(SR0); \
char *_s = (char *)(SR1); \
while (*_d++ ); \
_d--; \
while (*_d ++ = *_s ++); \
} while (0)
#define strlen_(SR) \
({ char *_p = (SR);long _l = 0; \
while (*_p ++) _l++; \
(_l-1); \
})
#endif
/* メモ */
/*
-----------------------------------------------------
CMP x,y
符号なし 符号あり
y > x HI (High) GT (greater Than)
y >= x CC (Carry Clear) GE (Greater Equal)
y = x EQ (Equal) EQ (Equal)
y != x NE (Not Equal) NE (Not Equal)
y < x CS (Carry Set) LT (Less Than)
y <= x LS (Lower or Same) LE (Less or Equal)
PL (Plus) MI (Minus)
VC (Overflow Clear) VS (Overflow Set
F (always False) T (always True)
-----------------------------------------------------
screen(s,j,r,g)
s= 0 : 256×256
1 : 512×512
2 : 768×512
j= 0 : 1024×1024 16color Page0
1 : 512×512 16color Page0-3
2 : 512×512 256color Page0,1
3 : 512×512 65536color Page0
r= 0 : LowRes
1 : HighRes
g= 0 : Graphic Off
1 : Graphic On
-----------------------------------------------------
Video Controler R1 $E82500
FE DC BA 98 76 54 32 10
┌──┬──┬──┬──┰──┬──┬──┬──┐
│'00'│ SP │ TX │ GG ┃ GP3│ GP2│ GP1│ GP0│
└──┴──┴──┴──┸──┴──┴──┴──┘
SP スプライト+BG
TX テキスト 0-2で0が一番上に
GG 全グラフィック
GP? 各グラフィックプレーン 0-3で0が一番上に
-----------------------------------------------------
Video Controler R2 $E82600
15 14 13 12 11 10 9 8
┌──┬──┬──┬──┰──┬──┬──┬──┰
│ YS │ AH │ VHT│EXON┃ H/P│ B/P│ G/G│ G/T┃
└──┴──┴──┴──┸──┴──┴──┴──┸
YS 0; ノーマル 1;スーパーインポーズ時でもVideo画像無し
AH 0; ノーマル 1; GG+TextPalet0
VHT 0; ノーマル 1; GG+Video画像
EXON 0; ノーマル 1; H/P 有効
H/P 0; 特殊プライオリティ 1; 半透明 mode
B/P 0; SHARP 予約 1; H/P 領域指定に最下BIT
G/G 0; ノーマル 1; GG0とGG1の半透明
G/T 0; ノーマル 1; GGと下位スクリーンの半透明
7 6 5 4 3 2 1 0
┰──┬──┬──┬──┰──┬──┬──┬──┐
┃ '0'│ SON│ TON│ GS4┃ GS3│ GS2│ GS1│ GS0│
┸──┴──┴──┴──┸──┴──┴──┴──┘
SON 0; SP画面非表示 1; SP画面表示
TON 0; TX画面非表示 1; TX画面表示
GS4 0; GG画面非表示 1; 実サイズ1024×1024 GG画面表示
GS3 0; Gplen3 非表示 1; Gplen3 表示
GS2 0; Gplen2 非表示 1; Gplen2 表示
GS1 0; Gplen1 非表示 1; Gplen1 表示
GS0 0; Gplen0 非表示 1; Gplen0 表示
bit7:があやしい!! 謎の半透明モードになる
$EB0808 bit 9 0;SPRITE/BG 表示OFF (ハイアクセス)
1;SPRITE/BG 表示ON
-----------------------------------------------------
BITSNS
│g:a\b│ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│ 0:00│ 6& │ 5% │ 4$ │ 3# │ 2" │ 1! │ ESC │未定義│
│ 1:08│ BS │ \| │ ^~ │ -= │ 0 │ 9) │ 8( │ 7' │
│ 2:10│ U │ Y │ T │ R │ E │ W │ Q │ TAB │
│ 3:18│ S │ A │ [CR] │ [ │ @` │ P │ O │ I │
│ 4:20│ ;+ │ L │ K │ J │ H │ G │ F │ D │
│ 5:28│ N │ B │ V │ C │ X │ Z │ ] │ :* │
│ 6:30│ DEL │ HOME │ [SP] │ _ │ /? │ .> │ ,< │ M │
│ 7:38│ CLR │ ↓ │ → │ ↑ │ ← │ UNDO │Rolldn│Rollup│
│ 8:40│ 4 │ + │ 9 │ 8 │ 7 │ - │ * │ / │
│ 9:48│ 0 │ ENTER│ 3 │ 2 │ 1 │ = │ 6 │ 5 │
│ A:50│ XF3 │ XF2 │ XF1 │ HELP │ 登録 │ 記号 │ . │ , │
│ B:58│ ヒカナ │ INS │ CAPS │コード│ ローマ字│ かな │ XF5 │ XF4 │
│ C:60│ F5 │ F4 │ F3 │ F2 │ F1 │ COPY │ BREAK│ 全角 │
│ D:68│未定義│未定義│未定義│ F10 │ F9 │ F8 │ F7 │ F6 │
│ E:70│未定義│未定義│未定義│未定義│ OPT.2│ OPT.1│ CTRL │ SHIFT│
│ F:78│未定義│未定義│未定義│未定義│未定義│未定義│未定義│未定義│
*/